package com.cr.manager.service.impl;

import java.util.List;

import com.cr.common.constant.CommonConstant;
import com.cr.common.utils.DateUtils;
import com.cr.manager.domain.Car;
import com.cr.manager.domain.UserRent;
import com.cr.manager.domain.dto.CarDto;
import com.cr.manager.domain.dto.RentDto;
import com.cr.manager.domain.dto.UserRentDto;
import com.cr.manager.domain.vo.RentVo;
import com.cr.manager.mapper.CarMapper;
import com.cr.manager.mapper.UserMapper;
import com.cr.manager.mapper.UserRentMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.cr.manager.mapper.RentMapper;
import com.cr.manager.domain.Rent;
import com.cr.manager.service.IRentService;
import org.springframework.transaction.annotation.Transactional;

/**
 * 租借管理Service业务层处理
 * 
 * @author lms
 * @date 2024-08-07
 */
@Service
public class RentServiceImpl implements IRentService 
{
    @Autowired
    private RentMapper rentMapper;
    @Autowired
    private UserMapper userMapper;
    @Autowired
    private CarMapper carMapper;
    @Autowired
    private UserRentMapper userRentMapper;

    /**
     * 查询租借管理
     * 
     * @param id 租借管理主键
     * @return 租借管理
     */
    @Override
    public RentDto selectRentById(String id)
    {
        // 根据筛选条件获取租借用户信息
        RentDto dto = rentMapper.selectRentById(id);
        // 补齐租借用户信息
        UserRentDto userRentDto = new UserRentDto();
        userRentDto.setRentId(dto.getId());
        List<UserRentDto> userRentDtos = userRentMapper.selectUserRentList(userRentDto);    // 基本只返回一条
        if(userRentDtos!=null && userRentDtos.size()!=0){
            dto.setRentUserId(userRentDtos.get(0).getUserId());
            dto.setRentUsername(userRentDtos.get(0).getRentUsername());
            dto.setRentPhone(userRentDtos.get(0).getRentPhone());
        }
        return dto;
    }

    /**
     * 查询租借管理列表
     * 
     * @param rentDto 租借管理
     * @return 租借管理
     */
    @Override
    public List<RentDto> selectRentList(RentDto rentDto)
    {
        // 根据筛选条件获取租借用户信息
        List<RentDto> rentDtos = rentMapper.selectRentList(rentDto);
        // 补齐租借用户信息
        for (RentDto dto : rentDtos) {
            UserRentDto userRentDto = new UserRentDto();
            userRentDto.setRentId(dto.getId());
            List<UserRentDto> userRentDtos = userRentMapper.selectUserRentList(userRentDto);    // 基本只返回一条
            if(userRentDtos!=null && userRentDtos.size()!=0){
                dto.setRentUsername(userRentDtos.get(0).getRentUsername());
                dto.setRentPhone(userRentDtos.get(0).getRentPhone());
            }
        }
        return rentDtos;
    }

    /**
     * 新增租借管理
     * 
     * @param rentVo 租借管理
     * @return 结果
     */
    @Override
    @Transactional
    public int insertRent(RentVo rentVo)
    {
        // 1、设置创建时间
        rentVo.setCreateTime(DateUtils.getNowDate());
        // 2、通过汽车Id获取联系人和电话
        CarDto carDto = carMapper.selectCarById(rentVo.getCarId());
        rentVo.setContact(carDto.getUsername());
        rentVo.setContactPhone(carDto.getPhone());
        // 3、插入租借信息
        int i = rentMapper.insertRent(rentVo);
        if(i>0){
            // 4、插入用户租借联系信息
            UserRent userRent = new UserRent();
            userRent.setUserId(rentVo.getRentUserId());
            userRent.setRentId(rentVo.getId());
            userRentMapper.insertUserRent(userRent);
            // 5、修改车辆的出租状态
            Car car = new Car();
            car.setId(rentVo.getCarId());
            car.setIsRent(CommonConstant.REND);
            carMapper.updateCar(car);
        }
        return i;
    }

    /**
     * 修改租借管理
     * 
     * @param rent 租借管理
     * @return 结果
     */
    @Override
    public int updateRent(Rent rent)
    {
        rent.setUpdateTime(DateUtils.getNowDate());
        return rentMapper.updateRent(rent);
    }


    /**
     * 删除租借管理信息
     * 
     * @param id 租借管理主键
     * @return 结果
     */
    @Override
    @Transactional
    public int deleteRentById(String id)
    {
        // 1、获取租借信息，判断是否为结束状态
        RentDto rentDto = rentMapper.selectRentById(id);
        if(!rentDto.getStatus().equals(CommonConstant.RENT_2)){
            // 1.2、不是结束状态，修改车辆出租状态
            Car car = carMapper.selectCarById(rentMapper.selectRentById(id).getCarId());
            car.setIsRent(CommonConstant.NOT_REND);
            carMapper.updateCar(car);
        }
        // 2、删除租借信息
        rentMapper.deleteRentById(id);
        // 3、删除用户租借联系信息
        return userRentMapper.deleteUserRentByRentId(id);
    }
}
